package cn.unknowpupil.init.domain.system;

import cn.unknowpupil.init.configure.mybatisplus.base.SuperEntity;
import cn.unknowpupil.init.utils.strings.StringUtils;
import cn.unknowpupil.init.utils.quartz.CronUtils;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.util.Date;


/**
 * Created at 2020-11-06 by  w10g <br>
 * Initialize SysJob  ... <br>
 *  定时任务调度表
 *
 * @author unknowpupil
 * @since 0.0.1
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("sys_job")
@ApiModel(value = "SysJob 域", description = "定时任务调度表")
public class SysJob extends SuperEntity<SysJob> {

private static final long serialVersionUID=1L;
    /**
     * 任务名称
     */
    @ApiModelProperty(value = "任务名称")
    @TableField(value ="job_name")

    private String jobName;
    /**
     * 任务组名
     */
    @ApiModelProperty(value = "任务组名")
    @TableField(value ="job_group")
    private String jobGroup;
    /**
     * 调用目标字符串
     */
    @ApiModelProperty(value = "调用目标字符串")
    @TableField(value ="invoke_target")
    private String invokeTarget;
    /**
     * cron执行表达式
     */
    @ApiModelProperty(value = "cron执行表达式")
    @TableField(value ="cron_expression")
    private String cronExpression;
    /**
     * 计划执行错误策略（1立即执行 2执行一次 3放弃执行）
     */
    @ApiModelProperty(value = "计划执行错误策略（1立即执行 2执行一次 3放弃执行）")
    @TableField(value ="misfire_policy")
    private String misfirePolicy;
    /**
     * 是否并发执行（0允许 1禁止）
     */
    @ApiModelProperty(value = "是否并发执行（0允许 1禁止）")
    @TableField(value ="concurrent")
    private String concurrent;

    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    public Date getNextValidTime()
    {
        if (StringUtils.isNotEmpty(cronExpression))
        {
            return CronUtils.getNextExecution(cronExpression);
        }
        return null;
    }
}